package com.zntech.app.common.accessibility

import android.content.Context
import android.graphics.Point
import android.graphics.PointF
import android.graphics.Rect
import com.zntech.app.common.accessibility.bean.AssistSiblingResult
import com.zntech.app.common.accessibility.bean.InstantAssistText
import com.zntech.app.common.shell.ShellResult

object InstantAssist {

    fun init(context: Context?) {
        if (context != null) {
            InstantAssistClient.init(context.applicationContext)
        }
    }

    fun destroy() {
        InstantAssistClient.destroy()
    }

    fun getPageText(rcLimit: Rect?): List<InstantAssistText>? {
        return InstantAssistClient.getPageText(rcLimit)
    }

    /**
     * 根据指定条件查找区域，返回第一个匹配结果
     */
    fun findByText(text: String): Rect? {
        return InstantAssistClient.findByText(text)
    }

    fun findById(id: String): Rect? {
        return InstantAssistClient.findById(id)
    }

    /**
     * 根据指定条件查找区域，返回所有匹配结果
     */
    fun findAllByText(text: String): List<Rect>? {
        return InstantAssistClient.findAllByText(text)
    }

    fun findAllById(id: String): List<Rect>? {
        return InstantAssistClient.findAllById(id)
    }

    /**
     * 获取页面所有的节点信息
     */
    fun getPageInfo(): List<InstantAssistText>? {
        return InstantAssistClient.getPageInfo()
    }
    /**
     * 获取页面限制区域内的根据指定id组的信息
     * @param rcLimit 限制区域，为null时不限制
     * @param ids id组信息
     * @param isIntersection 指定区域是否为交集, 默认为true
     */
    fun getPageInfoByIds(
        rcLimit: Rect?,
        vararg ids: String,
        isIntersection: Boolean = true,
    ): List<InstantAssistText>? {
        return InstantAssistClient.getPageInfoByIds(rcLimit, *ids, isIntersection = isIntersection)
    }


    /**
     * 根据指定区域查找符合指定ID和兄弟ID组的信息
     * @param rcLimit 限制区域，为null时不限制
     * @param mainId 主ID
     * @param siblingIds 所有兄弟节点ID，传入“”则表示不指定
     * @param isIntersection 指定区域是否为交集, 默认为true
     * @return 包含指定id和兄弟id所有信息
     */
    fun findAllByIdAndSiblingIds(
        rcLimit: Rect?,
        mainId: String,
        vararg siblingIds: String,
        isIntersection: Boolean = true,
    ): List<AssistSiblingResult>? {

        return InstantAssistClient.findAllByIdAndSiblingIds(
            rcLimit,
            mainId,
            *siblingIds,
            isIntersection = isIntersection
        )
    }


    /**
     * 粘贴文本，指定控件ID或指定坐标
     * 会清空对应控件的文本后再粘贴
     */
    fun pasteText(text: String, pt: PointF): Boolean {
        return pasteText(text, pt.x, pt.y)
    }

    fun pasteText(text: String, x: Float, y: Float): Boolean {
        return InstantAssistClient.pasteText(text, x, y) == true
    }

    fun pasteText(text: String, viewId: String): Boolean {
        return InstantAssistClient.pasteText(text, viewId) == true
    }


    /**
     * 执行shell命令
     */
    fun execShell(cmd: String): ShellResult {
        return InstantAssistClient.execShell(cmd)
    }
}